/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ACOLITOBEBIDAS_H
#define ACOLITOBEBIDAS_H

#include <QWidget>
#include <QList>
#include <QDialogButtonBox>
#include <QAbstractButton>
#include <QButtonGroup>
#include <QGridLayout>

#include <botonproducto.h>
#include <addproductosdialog.h>
#include <dialogopales.h>

namespace Ui {
    class AcolitoBebidas;
}

class AcolitoBebidas : public QWidget {
    Q_OBJECT
    Q_PROPERTY(bool conectado READ isConectado WRITE setConectado)

    Q_ENUMS(ModoVenta)
public:
    AcolitoBebidas(QWidget *parent = 0);
    ~AcolitoBebidas();

    enum ModoVenta
    {
        Asistente=32,Organizador=33
    };

    /*!
      Devuelve el estado de conexion del acolito
      */

    bool isConectado() const;

public slots:

    /*!
      Establece el estado de conexion del acolito
      */

    void setConectado(bool estado);

    /*!
      Nuevos productos
      */

    void nuevosProductos();

    /*!
     Dialogo de pales
     */

    void abrirDialogoPales();

signals:

    /*!
      Se ha calculado un nuevo total
      */

    void nuevoTotal(double t);

protected:
    void changeEvent(QEvent *e);

private:
    Ui::AcolitoBebidas *ui;

    bool estadoConexion;                    ///< Marcador del estado de conexion del acolito
    QList<BotonProducto *> listaProductos;  ///< Lista de productos
    QGridLayout *layoutBotones;             ///< Layout de los botones de venta
    QButtonGroup *botonesModo;              ///< Botones de seleccion de modo

    ModoVenta mod;                          ///< Modo de venta

    /*!
      prepara el acolito
      */

    void setup();

    /*!
      Limpia la lista de productos
      */

    void limpiaBotonesProductos();

    /*!
      Muestra los botones
      */

    void mostrarBotonesProductos();

private slots:

    /*!
      Limpia la venta
      */

    void limpiaVenta();

    /*!
      Guarda la venta en el sistema
      */

    void guardaVenta();

    /*!
      Introduce un producto en la lista de venta
      */

    void addProductoVenta(QString n,double pVenta,double pOrg);

    /*!
      Calcula el total del producto dependiendo del modo
      */

    void calculaTotal(int modo);

    /*!
      Establece el modo de venta
      */

    void setModo(int modo);

    /*!
      Calcula el cambio a devolver
      */

    void calculaCambio(double efectivo);

    /*!
      Genera la lista de productos
      */

    void generaBotonesProductos();

};

#endif // ACOLITOBEBIDAS_H
